home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1986-01-27 | 18.8 KB | 895 lines |
- 210 '
- 220 '
- 230 ' INITIALIZATION
- 240 CLEAR,,,32768
- 250 DEF SEG
- 260 DEFINT A-Z
- 270 SCREEN 1
- 280 COLOR 1,0
- 290 KEY OFF
- 300 CLS
- 310 '
- 320 ' DEFINE ALL ARRAY VARIABLES
- 330 DIM CURSRBOX(91),MENU(9001),WORK(9001)
- 340 DIM MESSAGE(281),COLORNAME$(7),LABEL(321)
- 350 '
- 360 ' GET THE BLANK SCREEN FOR LATER PANIC
- 370 GET (0,0)-(319,199),WORK
- 380 '
- 390 ' PRELIMINARY MESSAGE TO PREVENT USER PANIC
- 400 LOCATE 12,5
- 410 PRINT "-IF A HARDCOPY OF THE SCREEN IS WANTED"
- 412 LOCATE 13,6:PRINT "RESTART DOS AND LOAD GRAPHICS THEN CAGRAPH"
- 420 '
- 430 'BUILD THE ARRAY OF COLOR NAMES
- 440 FOR I = 0 TO 7
- 450 READ COLORNAME$(I)
- 460 NEXT I
- 470 DATA BLACK,BLUE,GREEN,CYAN,RED,MAGENTA,BROWN,WHITE
- 480 '
- 490 ' READ INITIAL VALUES FOR SOME VARIABLES
- 500 READ DFACTOR$,DELTA,X,Y,PALETT,BACKGROUND
- 510 READ FOREGROUND,BOUNDARY,XP,YP
- 520 DATA 2,1,159,99,0,1,3,3,1,1
- 530 '
- 540 ' SET INITIAL VALUES FOR SOME VARIABLES
- 550 SEARCH$ =CHR$(13)
- 560 TILE$ = STRING$(4,255)
- 570 BACK$ = CHR$(0)
- 580 '
- 590 ' TITLE SCREEN
- 600 CLS
- 610 FOR I = 1 TO 2
- 620 '
- 630 ' FIRST IN RED, THEN OVERLAYED IN GREEN AND BROWN
- 640 IF I=1 THEN FILL = 2 ELSE FILL = 1
- 650 IF I=1 THEN EDGE = 2 ELSE EDGE = 3
- 660 IF I = 1 THEN XT = 22 ELSE XT = 25
- 670 IF I = 1 THEN YT = 82 ELSE YT = 80
- 680 '
- 690 ' "C"
- 700 DRAW "C=EDGE;BM=XT;,=YT;U40R30D5L25D30R25D5L30BE3P=FILL;,=EDGE;"
- 710 '
- 720 ' "A"
- 730 XT = XT + 40
- 740 DRAW "C=EDGE;BM=XT;,=YT;U40R30D40L5U20L20D20L5U25BR5"
- 750 DRAW "U10R20D10L20BG1P=FILL;,=EDGE;"
- 760 '
- 770 ' "G"
- 780 XT = XT + 40
- 790 DRAW "C=EDGE;BM=XT;,=YT;U40R30D5L25D30R20U10L5"
- 800 DRAW "U5R10D20L30BE1P=FILL;,=EDGE;"
- 810 '
- 820 ' "R"
- 830 XT = XT + 40
- 840 DRAW "C=EDGE;BM=XT;,=YT;U40R30D20L18F20L7H20D20L5"
- 850 DRAW "U25BR5U10R20D10L20BL1P=FILL;,=EDGE;"
- 860 '
- 870 ' "A"
- 880 XT = XT + 40
- 890 DRAW "C=EDGE;BM=XT;,=YT;U40R30D40L5U20L20D20L5U25BR5"
- 900 DRAW "U10R20D10L20BG1P=FILL;,=EDGE;"
- 910 '
- 920 ' "P"
- 930 XT = XT + 40
- 940 DRAW "C=EDGE;BM=XT;,=YT;U40R30D20L25D20L5BU25"
- 950 DRAW "BR5R20U10L20D10BL1P=FILL;,=EDGE;"
- 960 '
- 970 ' "H"
- 980 XT = XT + 40
- 990 DRAW "C=EDGE;BM=XT;,=YT;U40R5D15R20U15R5D40L5U20L20D20L5"
- 1000 DRAW "BE1P=FILL;,=EDGE;"
- 1010 '
- 1020 NEXT I
- 1030 '
- 1040 ' PUT A FRAME AROUND EDGE OF SCREEN
- 1050 LINE(0,0)-(319,199),3,B
- 1060 LINE (10,8)-(309,191),3,B
- 1070 PAINT (1,1),"TILE"
- 1080 '
- 1090 'VERBAL DESCRIPTION TO SCREEN
- 1100 LOCATE 13,7
- 1110 POKE &H4E, 2
- 1120 PRINT "COMPUTER AIDED GRAPHICS";
- 1130 POKE &H4E, 3
- 1140 '
- 1150 ' DISPLAY MENU
- 1160 LOCATE 15,8
- 1170 PRINT "F1 - LINE F2 - BOX";
- 1180 LOCATE 16,8
- 1190 PRINT "F3 - CIRCLE F4 - ERASE";
- 1200 LOCATE 17,8
- 1210 PRINT "F5 - COLORS F6 - PAINT";
- 1220 LOCATE 18,8
- 1230 PRINT "F7 - LABEL F8 - FILE";
- 1240 LOCATE 19,8
- 1250 PRINT "F9 - BACKUP F10- MENU";
- 1260 '
- 1270 ' GRAB THE ENTIRE SCREEN FOR USE BY F10 FUNCTION LATER
- 1280 GET (0,0)-(319,199),MENU
- 1290 GOSUB 6790
- 1300 GOSUB 7790
- 1310 '
- 1320 ' GET THE FUNCTION AND CURSOR KEYS READY FOR ACTION
- 1330 ON KEY (1) GOSUB 1580
- 1340 ON KEY (2) GOSUB 1870
- 1350 ON KEY (3) GOSUB 2160
- 1360 ON KEY (4) GOSUB 2450
- 1370 ON KEY (5) GOSUB 2740
- 1380 ON KEY (6) GOSUB 3460
- 1390 ON KEY (7) GOSUB 5170
- 1400 ON KEY (8) GOSUB 5700
- 1410 ON KEY (9) GOSUB 6400
- 1420 ON KEY (10) GOSUB 6610
- 1430 ON KEY (11) GOSUB 6900
- 1440 ON KEY (12) GOSUB 7110
- 1450 ON KEY (13) GOSUB 7320
- 1460 ON KEY (14) GOSUB 7530
- 1470 '
- 1480 ' THIS IS WHERE WE HURRY UP AND WAIT A LOT
- 1490 WHILE NOT TIME.TO.QUIT
- 1500 EMPTY.THE.KEY.BUFFER$ = INKKEY$
- 1510 WHILE DELTA > 1
- 1520 DELTA = DELTA - 1
- 1530 WEND
- 1540 KEYPRT = KEYPTR MOD 14 + 1
- 1550 KEY (KEKYPTR) ON
- 1560 WEND
- 1570 '
- 1580 '-------------------------------- KEY F1, LINE CREATION
- 1590 ' CHECK IF ANY PENDING OPERATIONS
- 1600 IF CIRCLEFLAG THEN 1840
- 1610 IF BOXFLAG THEN 1840
- 1620 IF ERASEFLAG THEN 1840
- 1630 '
- 1640 ' PREPARE SCREEN
- 1650 GOSUB 7750
- 1660 GOSUB 8020
- 1670 '
- 1680 ' START OR STOP DRAWING LINE?
- 1690 IF LINEFLAG THEN GOSUB 8170
- 1700 '
- 1710 ' TOGGLE THE LINE DRAWING FLAG
- 1720 LINEFLAG = -(LINEFLAG = 0)
- 1730 '
- 1740 ' REMEMBER THE CURRENT POINT
- 1750 X1 = X
- 1760 Y1 = Y
- 1770 '
- 1780 ' REWORK THE DISPLAY
- 1790 GOSUB 8170
- 1800 GOSUB 7790
- 1810 '
- 1820 ' END OF F1 PROCESSING
- 1830 GOTO 1850
- 1840 SOUND 222,5
- 1850 RETURN
- 1860 '
- 1870 '-------KEY F2, BOX CREATION
- 1880 ' CHECK IF ANY PENDING OPERATIONS
- 1890 IF CIRCLEFLAG THEN 2130
- 1900 IF LINEFLAG THEN 2130
- 1910 IF ERASEFLAG THEN 2130
- 1920 '
- 1930 ' PREPARE SCREEN
- 1940 GOSUB 7750
- 1950 GOSUB 8020
- 1960 '
- 1970 ' START OR STOP DRAWING A BOX?
- 1980 IF BOXFLAG THEN GOSUB 8170
- 1990 '
- 2000 ' TOGGLE THE BOX DRAWING FLAG
- 2010 BOXFLAG = -(BOXFLAG = 0)
- 2020 '
- 2030 ' REMEMBER THE CURRENT POINT
- 2040 X1 = X
- 2050 Y1 = Y
- 2060 '
- 2070 ' REWORK THE SCREEN
- 2080 GOSUB 8170
- 2090 GOSUB 7790
- 2100 '
- 2110 ' END OF F2 PROCESSING
- 2120 GOTO 2140
- 2130 SOUND 222,5
- 2140 RETURN
- 2150 '
- 2160 '----KEY F3, CIRCLE CREATION
- 2170 ' CHECK IF ANY PENDING OPERAETIONS
- 2180 IF LINEFLAG THEN 2420
- 2190 IF BOXFLAG THEN 2420
- 2200 IF ERASEFLAG THEN 2420
- 2210 '
- 2220 ' PREPARE SCREEN
- 2230 GOSUB 7750
- 2240 GOSUB 8020
- 2250 '
- 2260 ' START OR STOP DRAWING CIRCLE?
- 2270 IF CIRCLEFLAG THEN GOSUB 8170
- 2280 '
- 2290 ' TOGGLE THE CIRCLE DRAWING FLAG
- 2300 CIRCLEFLAG = -(CIRCLEFLAG = 0)
- 2310 '
- 2320 ' REMEMBER THE CURRENT POINT
- 2330 X1 = X
- 2340 Y1 = Y
- 2350 '
- 2360 ' REWORK THE SCREEN
- 2370 GOSUB 8170
- 2380 GOSUB 7790
- 2390 '
- 2400 ' END OF F3 PROCESSING
- 2410 GOTO 2430
- 2420 SOUND 222,5
- 2430 RETURN
- 2440 '
- 2450 '------KEY F4, EASE RECTANGULAR AREA
- 2460 ' CHECK IF ANY PENDING OPERATIONS
- 2470 IF LINEFLAG THEN 2710
- 2480 IF BOXFLAG THEN 2710
- 2490 IF CIRCLEFLAG THEN 2710
- 2500 '
- 2510 ' PREPARE SCREEN
- 2520 GOSUB 7750
- 2530 GOSUB 8020
- 2540 '
- 2550 'START OR STOP ERASING AN AREA?
- 2560 IF ERASEFLAG THEN GOSUB 8170
- 2570 '
- 2580 ' TOGGLE THE ERASING FLAG
- 2590 ERASEFLAG = -(ERASEFLAG = 0)
- 2600 '
- 2610 ' REMEMBER THE CURENT POINT
- 2620 X1 = X
- 2630 Y1 = Y
- 2640 '
- 2650 ' REWORK THE SCREEN
- 2660 GOSUB 8170
- 2670 GOSUB 7790
- 2680 '
- 2690 ' END OF F4 PROCESSING
- 2700 GOTO 2720
- 2710 SOUND 222,5
- 2720 RETURN
- 2730 '
- 2740 '------KEY F5, COLOR SELECTION
- 2750 ' DEACTIVATE THE FUNCTION KEYS
- 2760 FOR I = 1 TO 14
- 2770 KEY (I) OFF
- 2780 NEXT I
- 2790 '
- 2800 ' CHECK IF ANY PENDING OPERATIONS
- 2810 IF LINEFLAG THEN 3430
- 2820 IF BOXFLAG THEN 3430
- 2830 IF CIRCLEFLAG THEN 3430
- 2840 IF ERASEFLAG THEN 3430
- 2850 '
- 2860 ' PREPARE SCREEN
- 2870 GOSUB 7750
- 2880 '
- 2890 ' GRAB CHUNK OF SCREEN SO WE CAN WORK THERE
- 2900 XL = 17
- 2910 YL = 74
- 2920 GET (XL,YL)-(301,124),WORK
- 2930 '
- 2940 'DRAW A FRAME AROUND THE WORK AREA
- 2950 LINE (XL,YL)-(301,124),1,BF
- 2960 LINE (22,79)-(296,119),2,BF
- 2970 '
- 2980 ' SET THE CURRENT COLOR VALUES
- 2990 COLOR BACKGROUND, PALETT
- 3000 '
- 3010 ' CLEAR THE WORK AREA
- 3020 LINE (27,84)-(291,114),0,BF
- 3030 '
- 3040 ' DISPLAY THE WORKING MENU
- 3050 LOCATE 12,5
- 3060 PRINT "<P>ALETTE... ";PALETT;
- 3070 LOCATE 13,5
- 3080 PRINT "<B>ACKGROUND... ";
- 3090 PRINT COLORNAME$(BACKGROUND MOD 8);
- 3100 IF BACKGROUND > 7 THEN PRINT " -BRIGHT";
- 3110 LOCATE 14,5
- 3120 PRINT "<F>OREGROUNG... ";
- 3130 IF FOREGROUND = 0 THEN PRINT COLORNAME$(BACKGROUND MOD 8);
- 3140 IF FOREGROUND > 0 THEN PRINT COLORNAME$(2 * FOREGROUND + PALETT);
- 3150 '
- 3160 ' WAIT FOR USE RESPOUNCE
- 3170 SEARCH$ = "PBF"+CHR$(13)
- 3180 GOSUB 8670
- 3190 '
- 3200 ' CHANGE THE PALETTE?
- 3210 IF KEYSELECT <> 1 THEN 3260
- 3220 PALETT = -(PALETT = 0)
- 3230 GOTO 2990
- 3240 '
- 3250 ' CHANGE THE BACKGROUND?
- 3260 IF KEYSELECT <> 2 THEN 3310
- 3270 BACKGROUND = (BACKGROUND + 1) MOD 16
- 3280 GOTO 2990
- 3290 '
- 3300 ' CHANGE THE FOREGROUND?
- 3310 IF KEYSELECT <> 3 THEN 3360
- 3320 FOREGROUND = (FOREGROUND + 1) MOD 4
- 3330 GOTO 2990
- 3340 '
- 3350 ' RESTORE THE WORK AREA OF SCREEN
- 3360 PUT (XL,YL),WORK,PSET
- 3370 '
- 3380 ' REPLACE THE CURSOR
- 3390 GOSUB 7790
- 3400 '
- 3410 ' END OF F5 PROCESSING
- 3420 GOTO 3440
- 3430 SOUND 222,5
- 3440 RETURN
- 3450 '
- 3460 '---- KEY F6, PAINT AN AREA
- 3470 ' DEACTIVATE THE FUNCTION KEYS
- 3480 FOR I = 1 TO 14
- 3490 KEY (I) OFF
- 3500 NEXT I
- 3510 '
- 3520 ' CHECK IF ANY PENDING OPERATIONS
- 3530 IF LINEFLAG THEN 5030
- 3540 IF BOXFLAG THEN 5030
- 3550 IF CIRCLEFLAG THEN 5030
- 3560 IF ERASEFLAG THEN 5030
- 3570 '
- 3580 ' ERASE THE CURSOR
- 3590 GOSUB 7750
- 3600 '
- 3610 ' GRAB CHUNK OF SCREEN SO WE CAN WORK THERE
- 3620 XL = 17
- 3630 YL = 27
- 3640 GET (XL,YL)-(301,138),WORK
- 3650 '
- 3660 'DRAW FRAME AROUND THE WORK AREA
- 3670 LINE (XL,YL)-(301,138),1,BF
- 3680 LINE (22,32)-(296,133),2,BF
- 3690 '
- 3700 ' CLEAR THE WORK AREA
- 3710 LINE (27,37)-(291,127),0,BF
- 3720 '
- 3730 ' DISPLAY WORKING MENU
- 3740 LOCATE 6,16
- 3750 PRINT "* PAINT *";
- 3760 LOCATE 8,9
- 3770 PRINT "<B>OUNDARY... ";
- 3780 IF BOUNDARY = 0 THEN PRINT COLORNAME$(BACKGROUND MOD 8);
- 3790 IF BOUNDARY > 0 THEN PRINT COLORNAME$(2 * BOUNDARY + PALETT);
- 3800 LOCATE 16,10
- 3810 PRINT "<";CHR$(24);CHR$(25);CHR$(26);CHR$(27);"> ";
- 3820 PRINT "<0123> ";"<4567>";
- 3830 '
- 3840 ' DISPLAY 4 BY 4 BLOCK OF ENLARGED PAINT PIXELS
- 3850 FOR XQ = 1 TO 4
- 3860 FOR YQ = 1 TO 4
- 3870 GOSUB 5120
- 3880 NEXT YQ,XQ
- 3890 '
- 3900 ' DRAW AN "X" IN THE CURRENT LARGE PIXEL
- 3910 XPT = 7 * XP + 99
- 3920 YPT = 7 * YP + 70
- 3930 CPT = (POINT(XPT,YPT) + 2) MOD 4
- 3940 DRAW "C=CPT;BM=XPT;,=YPT;F7BU7G7"
- 3950 '
- 3960 ' BUILD A BOX AND FILL IT WITH A SAMPLE OF CURRENT PAINT
- 3970 LINE (184,77)-(212,105),0,BF
- 3980 LINE (184,77)-(212,105),3,B
- 3990 BACK$ = CHR$((ASC(BACK$)+1) MOD 256)
- 4000 IF INSTR(TILE$,BACK$+BACK$) THEN 3990
- 4010 PAINT (199,88),TILE$,3,BACK$
- 4020 '
- 4030 ' WAIT FOR USER INPUT
- 4040 SEARCH$ = "B" + MKI$(18432) + MKI$(20480) + MKI$(19712)
- 4050 SEARCH$ = SEARCH$ + MKI$(19200) + "01234567" + CHR$(13)
- 4060 GOSUB 8670
- 4070 '
- 4080 'PUT THE CURSOR BACK ON THE SCREEN
- 4090 IF KEYSELECT <> 1 THEN 4140
- 4100 BOUNDARY = (BOUNDARY + 1) MOD 4
- 4110 GOTO 3710
- 4120 '
- 4130 ' CURSOR UP TO NEXT LARGE PIXEL?
- 4140 IF KEYSELECT <> 2 THEN 4210
- 4150 GOSUB 5060
- 4160 YP = YP + (YP > 1)
- 4170 GOSUB 5060
- 4180 GOTO 3910
- 4190 '
- 4200 ' CURSOR DOWN TO NEXT LARGE PIXEL?
- 4210 IF KEYSELECT <> 4 THEN 4280
- 4220 GOSUB 5060
- 4230 YP = YP - (YP < 4)
- 4240 GOSUB 5060
- 4250 GOTO 3910
- 4260 '
- 4270 'CURSOR RIGHT TO NEXT LARGE PIXEL?
- 4280 IF KEYSELECT <> 6 THEN 4350
- 4290 GOSUB 5060
- 4300 XP = XP - (XP < 4)
- 4310 GOSUB 5060
- 4320 GOTO 3910
- 4330 '
- 4340 ' CURSOR LEFT TO NEXT LARGE PIXEL?
- 4350 IF KEYSELECT <> 8 THEN 4420
- 4370 XP = XP + (XP >1)
- 4380 GOSUB 5060
- 4390 GOTO 3910
- 4400 '
- 4410 ' CHANGE PIXEL TO COLOR 0?
- 4420 IF KEYSELECT <> 10 THEN 4470
- 4430 CQ = 0
- 4440 GOTO 4820
- 4450 '
- 4460 ' CHANGE PIXEL TO COLOR 1?
- 4470 IF KEYSELECT <> 11 THEN 4520
- 4480 CQ = 1
- 4490 GOTO 4820
- 4500 '
- 4510 ' HANGE PIXEL TO COLOR 2?
- 4520 IF KEYSELECT <> 12 THEN 4570
- 4530 CQ = 2
- 4540 GOTO 4820
- 4550 '
- 4560 ' CHANGE PIXEL TO COLOR 3?
- 4570 IF KEYSELECT <> 13 THEN 4620
- 4580 CQ = 3
- 4590 GOTO 4820
- 4600 '
- 4610 ' CHANGE ENTIRE PAINT FIELD TO COLOR 0?
- 4620 IF KEYSELECT <> 14 THEN 4670
- 4630 TILE$ = STRING$(4,0)
- 4640 GOTO 3850
- 4650 '
- 4660 ' CHANGE ENTIRE PAINT FIELD TO CLOLOR 1?
- 4670 IF KEYSELECT <> 15 THEN 4720
- 4680 TILE$ = STRING$(4,85)
- 4690 GOTO 3850
- 4700 '
- 4710 ' CHANGE ENTIRE PAINT FIELD TO COLOR 2?
- 4720 IF KEYSELECT <> 16 THEN 4770
- 4730 TILE$ = STRING$(4,170)
- 4740 GOTO 3850
- 4750 '
- 4760 ' CHANGE ENTIRE PAINT FIELD TO CLOLR 3?
- 4770 IF KEYSELECT <> 17 THEN 4880
- 4780 TILE$ = STRING$(4,255)
- 4790 GOTO 3850
- 4800 '
- 4810 ' ALTER THE TILING BITS FOR NEW PIXEL
- 4820 BYTE = ASC(MID$(TILE$,YP))
- 4830 BYTE = (CQ*(4^(4-XP))) OR ((NOT(3*(4^(4-XP)))) AND BYTE)
- 4840 MID$(TILE$,YP,1) = CHR$(BYTE)
- 4850 GOTO 3850
- 4860 '
- 4870 ' REPLACE SCREEN IN THE WORK AREA
- 4880 PUT (XL,YL),WORK,PSET
- 4890 '
- 4900 'GRAB ENTIRE SCREEN IN CASE WE WANT TO BACK UP LATER
- 4910 XL = 0
- 4920 YL = 0
- 4930 GET (XL,YL)-(319,199),WORK
- 4940 '
- 4950 'GET OUT THE BUCKET OF PAINT
- 4960 PAINT (X,Y),TILE$,BOUNDARY,BACK$
- 4970 '
- 4980 'PUT THE CURSOR BACK ON THE SCREEN
- 4990 GOSUB 7790
- 5000 '
- 5010 ' END OF F6 PROCESSING
- 5020 GOTO 3440
- 5030 SOUND 222,5
- 5040 RETURN
- 5050 '
- 5060 ' SUBROUTINE, "PIXEL" AT XP,YP
- 5070 XQ = XP
- 5080 YQ = YP
- 5090 GOSUB 5120
- 5100 RETURN
- 5110 '
- 5120 'SUBROUTINE, DRAW LARGE "PIXEL" AT XQ,YQ
- 5130 CQ = FOREGROUND
- 5140 LINE (7*XQ+99,7*YQ+70)-(7*XQ+106,7*YQ+77),CQ,BF
- 5150 RETURN
- 5160 '
- 5170 '-----KEY F7, TEXT STRING ON SCREEN
- 5180 ' CHECK IF ANY PENDING OPERATIONS
- 5190 IF LINEFLAG THEN 5670
- 5200 IF BOXFLAG THEN 5670
- 5210 IF CIRCLEFLAG THEN 5670
- 5220 IF ERASEFLAG THEN 5670
- 5230 '
- 5240 ' ERASE THE CURSOR
- 5250 GOSUB 7750
- 5260 '
- 5270 ' GRAB ENTIRE SCREEN, SO WE CAN BACK UP LATER IF DESIRED
- 5280 XL = 0
- 5290 YL = 0
- 5300 GET (XL,YL)-(319,199),WORK
- 5310 '
- 5320 ' ASK USER FOR THE DESIRED TEXT
- 5330 CLS
- 5340 POKE &H4E,FOREGROUND
- 5350 LOCATE 3,1
- 5360 PRINT "ENTER YOUR TEXT..."
- 5370 LOCATE 1,1
- 5380 LINE INPUT LABEL$
- 5390 '
- 5400 'IS TEXT TOO SHORT OR TOO LONG?
- 5410 IF LABEL$ = "" THEN LABEL$ = " "
- 5420 IF LEN(LABEL$) > 40 THEN LABEL$ = LEFT$(LABEL$,40)
- 5430 '
- 5440 ' PEEL THE TEXT OFF SCREEN
- 5450 XLABEL = LEN(LABEL$) * 8
- 5460 GET (0,0)-(XLABEL-1,7),LABEL
- 5470 '
- 5480 ' REPLACE CURRENT SCREEN
- 5490 PUT (XL,YL),WORK,PSET
- 5500 '
- 5510 ' IS CURSOR TOO FAR TO THE RIGHT?
- 5520 WHILE X + XLABEL > 320
- 5530 X = X - 1
- 5540 WEND
- 5550 '
- 5560 ' IS CURSOR TOO HIGH ON THE SCREEN?5570 IF Y < 7 THEN Y = 7
- 5570 IF Y < 7 THEN Y = 7
- 5580 '
- 5590 ' PASTE THE TEXT AT CURENT CURSOR LOCATION
- 5600 PUT (X,Y-7),LABEL
- 5610 '
- 5620 ' REPLACE THE CURSOR
- 5630 GOSUB 7790
- 5640 '
- 5650 ' END OF F7 PROCESSING
- 5660 GOTO 5680
- 5670 SOUND 222,5
- 5680 RETURN
- 5690 '
- 5700 '-----KEY F8, FILE ACCESS
- 5710 ' CHECK IF ANY PENDING OPERATIONS
- 5720 IF LINEFLAG THEN 6370
- 5730 IF BOXFLAG THEN 6370
- 5740 IF CIRCLEFLAG THEN 6370
- 5750 IF ERASEFLAG THEN 6370
- 5760 '
- 5770 ' REMOVE CURSOR
- 5780 GOSUB 7750
- 5790 '
- 5800 ' GRAB ENTIRE SCREEN SO WE CAN BACK UP LATER
- 5810 XL = 0
- 5820 YL = 0
- 5830 GET (XL,YL)-(319,199),WORK
- 5840 '
- 5850 ' ASK USER FOR GUIDENCE...SAVE OR LOAD?
- 5860 CLS
- 5870 LOCATE 10,4
- 5880 PRINT "<S>AVE CURRENT WORK TO DISK"
- 5890 LOCATE 11,4
- 5900 PRINT "<L>OAD DICK FILE TO SCREEN"
- 5910 '
- 5920 'WAIT FOR USER RESPONSE
- 5930 SEARCH$ = "SL"+CHR$(13)
- 5940 GOSUB 8670
- 5950 '
- 5960 'SAVE SCREEN TO A FILE?
- 5970 IF KEYSELECT <> 1 THEN 6150
- 5980 CLS
- 5990 PRINT "FILE NAME FOR SAVE?"
- 6000 INPUT "(INCLUDE EXTENSION)... ";FILEMANE$
- 6010 '
- 6020 ' REPLACE ENTIRE SCREEN
- 6030 PUT (XL,YL),WORK,PSET
- 6040 '
- 6050 'COPY 16K OF SCREEN MEMORY TO BINARY FILE
- 6060 DEF SEG = &HB800
- 6070 BSAVE FILENAME$,0,&H4000
- 6080 '
- 6090 ' REPLACE THE CURSOR
- 6100 GOSUB 7790
- 6110 DEF SEG
- 6120 GOTO 6380
- 6130 '
- 6140 ' LOAD SCREEN DATA FROM A FILE?
- 6150 IF KEYSELECT <> 2 THEN 6290
- 6160 CLS
- 6170 PRINT "FILE NAME TO LOAD?"
- 6180 INPUT "(INCLUDE EXTENSION)... ";FILEMANE$
- 6190 '
- 6200 ' COPY 16K FROM BINARY FILE INTO SCREEN MEMORY
- 6210 DEF SEG = &HB800
- 6220 BLOAD FILENAME$
- 6230 '
- 6240 ' REPLACE THE CURSOR
- 6250 GOSUB 7790
- 6260 DEF SEG
- 6270 GOTO 6380
- 6280 '
- 6290 ' USER JUST PRESSED <ENTER>
- 6300 PUT (XL,YL),WORK,PSET
- 6310 '
- 6320 ' REPLACE CURSOR
- 6330 GOSUB 7790
- 6340 GOTO 6380
- 6350 '
- 6360 ' END OF F8 PROCESSING
- 6370 SOUND 222,5
- 6380 RETURN
- 6390 '
- 6400 '------KEY F9, BACKUP ONE STEP
- 6410 ' CHECK IF ANY PENDING OPERATIONS
- 6420 IF LINEFLAG THEN 6580
- 6430 IF BOXFLAG THEN 6580
- 6440 IF CIRLEFLAG THEN 6580
- 6450 IF ERASEFLAG THEN 6580
- 6460 '
- 6470 ' REMOVE CURSOR
- 6480 GOSUB 7750
- 6490 '
- 6500 ' REPLACE LAST WORK AREA OF SCREEN
- 6510 PUT (XL,YL),WORK,PSET
- 6520 '
- 6530 ' REPLACE CURSOR
- 6540 GOSUB 7790
- 6550 '
- 6560 ' END OF F9 PROCESING
- 6570 GOTO 6590
- 6580 SOUND 222,5
- 6590 RETURN
- 6600 '
- 6610 '------------KEY F10, DISPLAY MAIN MENU
- 6620 ' DEACTIVATE THE FUNCTION KEYS
- 6630 FOR I = 1 TO 14
- 6640 KEY (I) OFF
- 6650 NEXT I
- 6660 '
- 6670 ' CHECK IF ANY PENDING OPERATIONS
- 6680 IF LINEFLAG THEN 6870
- 6690 IF BOXFLAG THEN 6870
- 6700 IF CIRCLEFLAG THEN 6870
- 6710 IF ERASEFLAG THEN 6870
- 6720 '
- 6730 ' GRAB ENTIRE SCREEN TEMPORARILY
- 6740 GET (0,0)-(319,199),WORK
- 6750 '
- 6760 ' PUT MAIN MENU ON SCREEN
- 6770 PUT (0,0),MENU,PSET
- 6780 '
- 6790 ' WAIT FOR USER BEFORE CONTINUING
- 6800 GOSUB 8670
- 6810 '
- 6820 ' REPLACE CURRENT SCREEN
- 6830 PUT (0,0),WORK,PSET
- 6840 '
- 6850 ' END FUNTION 10 PROCESSING
- 6860 GOTO 6880
- 6870 SOUND 222,5
- 6880 RETURN
- 6890 '
- 6900 '----KEY F11, CURSOR UP
- 6910 ' REMOVE CURSOR
- 6920 GOSUB 7750
- 6930 '
- 6940 ' ERASE ANY PENDING LINES, BOXS, ECT.
- 6950 GOSUB 8020
- 6960 '
- 6970 ' MOVE THE CURSOR LOCATION UP
- 6980 Y = Y - DELTA
- 6990 IF Y < 0 THEN Y = 0
- 7000 IF DELTA < 9 THEN DELTA = DELTA + DFACTOR
- 7010 '
- 7020 ' REDRAW ANY PENDING LINES., BOXES, ETC.
- 7030 GOSUB 8170
- 7040 '
- 7050 ' REDRAW THE CURSOR
- 7060 GOSUB 7790
- 7070 '
- 7080 ' END OF F11 PROCESSING
- 7090 RETURN
- 7100 '
- 7110 '----KEY F12, CURSOR LEFT
- 7120 ' REMOVE THE CURSOR
- 7130 GOSUB 7750
- 7140 '
- 7150 ' ERASE ANY PENDING LINES, BOXES,ETC.
- 7160 GOSUB 8020
- 7170 '
- 7180 ' MOVE THE CURSOR LOCATION LEFT
- 7190 X = X - DELTA
- 7200 IF X < 9 THEN X = 0
- 7210 IF DELTA < 9 THEN DELTA = DELTA + DFACTOR
- 7220 '
- 7230 ' REDRAW ANY PENDING LINES, BOXES, ETC.
- 7240 GOSUB 8170
- 7250 '
- 7260 ' REDRAW THE CURSOR
- 7270 GOSUB 7790
- 7280 '
- 7290 ' END OF F12 PROCESSING
- 7300 RETURN
- 7310 '
- 7320 '-----KEKY F13, CURSOR RIGHT
- 7330 'ERASE CURSOR
- 7340 GOSUB 7750
- 7350 '
- 7360 ' ERASE ANY PENDING LINES, BOXES, ETC.
- 7370 GOSUB 8020
- 7380 '
- 7390 ' MOVE CURSOR LOCATION TO THE RIGHT
- 7400 X = X + DELTA
- 7410 IF X > 319 THEN X = 319
- 7420 IF DELTA < 9 THEN DELTA = DELTA + DFACTOR
- 7430 '
- 7440 ' REDRAW ANY PENDING LINES, BOXES, ETC.
- 7450 GOSUB 8170
- 7460 '
- 7470 ' REDRAW CURSOR
- 7480 GOSUB 7790
- 7490 '
- 7500 ' END OF F13 PROCESSING
- 7510 RETURN
- 7520 '
- 7530 '---KEY F14, CURSOR DOWN
- 7540 ' ERASE CURSOR
- 7550 GOSUB 7750
- 7560 '
- 7570 ' ERASE ANY PENDING LINES. BOXES, ETC.
- 7580 GOSUB 8020
- 7590 '
- 7600 ' MOVE CURSOR LOCATION DOWN
- 7610 Y = Y + DELTA
- 7620 IF Y > 199 THEN Y = 199
- 7630 IF DELTA < 9 THEN DELTA = DELTA + DFACTOR
- 7640 '
- 7650 ' REDRAW ANY PENDING LINES BOXES, ETC.
- 7660 GOSUB 8170
- 7670 '
- 7680 ' REDRAW CURSOR
- 7690 GOSUB 7790
- 7700 '
- 7710 ' END OF F14 PROCESSING
- 7720 RETURN
- 7730 '
- 7740 '----SHARED SUBROUTINES
- 7750 ' ERASE THE CURSOR
- 7760 PUT (XCG,YCG),CURSRBOX,PSET
- 7770 RETURN
- 7780 '
- 7790 ' DRAW CURSON AT X,Y
- 7800 ' COMPUTE LEFT EDGE OF AREA UNDER CURSOR TO PRESERVE
- 7810 XCG = X - 7
- 7820 IF XCG < 0 THEN XCG = 0
- 7830 IF XCG > 305 THEN XCG = 305
- 7840 '
- 7850 ' COMPUTE TOP EDGE OF AREA UNDER CURSOR TO PRESERVE
- 7860 YCG = Y - 7
- 7870 IF YCG < 0 THEN YCG = 0
- 7880 IF YCG > 185 THEN YCG = 185
- 7890 '
- 7900 ' GRAB AREA UNDER CURSOR
- 7910 GET (XCG,YCG)-(XCG+14,YCG+14),CURSRBOX
- 7920 '
- 7930 'DETERMINE REASONABLE COLOR FOR CURSOR
- 7940 CURSRCLR = (POINT(X,Y) + 2) MOD 4
- 7950 '
- 7960 ' DRAW THE CURSOR
- 7970 DRAW "C=CURSRCLR;BM=X;,=Y;L6R12BH6D12"
- 7980 '
- 7990 ' END OF CURSOR DRAWING SUBROUTINE
- 8000 RETURN
- 8010 '
- 8020 'CHECK FOR ERASING LINES, CIRCLESL, STC.
- 8030 IF LINEFLAG THEN 8120
- 8040 IF BOXFLAG THEN 8120
- 8050 IF CIRCLEFLAG THEN 8120
- 8060 IF ERASEFLAG THEN 8120
- 8070 '
- 8080 ' IF NO FLAGS THEN DON'T DO ANYTHING
- 8090 GOTO 8150
- 8100 '
- 8110 'PLACE THE WORK AREA BACK ON SCREEN
- 8120 PUT (XL,YL),WORK,PSET
- 8130 '
- 8140 ' END OF REPLACING-WORK-AREA SUBROUTINE
- 8150 RETURN
- 8160 '
- 8170 ' CHECK FOR DRAWING LINES, CIRCLES, ETC.
- 8180 IF LINEFLAG THEN 8240
- 8190 IF BOXFLAG THEN 8240
- 8200 IF ERASEFLAG THEN 8240
- 8210 GOTO 8430
- 8220 '
- 8230 ' GRAB CORNER COORDINATES OF WORK AREA
- 8240 XL = X
- 8250 YL = Y
- 8260 XL1 = X1
- 8270 YL1 = Y1
- 8280 '
- 8290 ' SHUFFLE COORDINATES INTO PROPER ORDER
- 8300 IF XL > XL1 THEN SWAP XL,XL1
- 8310 IF YL > YL1 THEN SWAP YL,YL1
- 8320 '
- 8330 ' GRAB THE WORK AREA FOR SAFEKEEPING
- 8340 GET (XL,YL)-(XL1,YL1),WORK
- 8350 '
- 8360 ' DO WHAT NEEDS TO BE DONE
- 8370 IF LINEFLAG THEN LINE (X,Y)-(X1,Y1),FOREGROUND
- 8380 IF BOXFLAG THEN LINE (X,Y)-(X1,Y1),FOREGROUND,B
- 8390 IF ERASEFLAG THEN PUT (XL,YL),WORK
- 8400 GOTO 8650
- 8410 '
- 8420 ' THE CIRCLE IS HANDLED SLIGHTLY DIFFERENTLY
- 8430 IF CIRCLEFLAG = 0 THEN 8650
- 8440 RADIUS = SQR((X1-X)^2 + (6*(Y1-Y)/5)^2)
- 8450 '
- 8460 ' GRAB THE CORONERS OF THE WORK AREA
- 8470 XL = X1 - RADIUS
- 8480 YL = Y1 - RADIUS
- 8490 XL1 = X1 + RADIUS
- 8500 YL1 = Y1 + RADIUS
- 8510 '
- 8520 ' CHECK FOR CORNERS THA ARE OFF-SCREEN
- 8530 IF XL < 0 THEN XL = 0
- 8540 IF YL < 0 THEN YL = 0
- 8550 IF XL1 > 319 THEN XL1 = 319
- 8560 IF YL1 > 199 THEN YL1 = 199
- 8570 '
- 8580 ' GRAB THE WORK AREA FOR SAFEKEEPING
- 8590 GET (XL,YL)-(XL1,YL1),WORK
- 8600 '
- 8610 ' DRAW THE CIRCLE
- 8620 CIRCLE (X1,Y1),RADIUS,FOREGROUND
- 8630 '
- 8640 ' END OF SUBROUTINE FOR DRAWING LINE, BOX,ETC.
- 8650 RETURN
- 8660 '
- 8670 ' SUBROUTINE, WAIT FOR USER BEFORE CONTINUING
- 8680 ' DUMP ANY BUFFERED KEYS
- 8690 WHILE LEN(INKEY$)
- 8700 WEND
- 8710 '
- 8720 ' GRAB AREA OF SCREEN SHERE MESSAGE WILL BE DISPLAYED
- 8730 GET (75,173)-(243,185),MESSAGE
- 8740 '
- 8750 ' ERASE AREA WHERE MESSAGE WILL BE DISPLAYED
- 8760 LINE (75,173)-(243,185),0,BF
- 8770 '
- 8780 'CHECK FOR ANY KEY PRESSES
- 8790 K$ = INKEY$
- 8800 IF K$ = "" THEN 8920
- 8810 '
- 8820 ' CONVERT TO UPPER CASE
- 8830 IF K$ < "a" THEN 8880
- 8840 IF K$ > "z" THEN 8880
- 8850 K$ = CHR$(ASC(K$)-32)
- 8860 '
- 8870 ' MATCH ANY POSSIBLE CHOICES AS INDICATED IN SEARCH$?
- 8880 KEYSELECT = INSTR(SEARCH$,K$)
- 8890 IF KEYSELECT THEN 9080
- 8900 '
- 8910 ' HAS ANOTHER SECOND ELAPSED?
- 8920 IF T$ = TIME$ THEN 8790
- 8930 T$ = TIME$
- 8940 '
- 8950 ' ONCE PER SECOND WE'LL CHANGE MESSAGE COLOR
- 8960 MCOLOR = 1 + MCOLOR MOD 3
- 8970 POKE &H4E, MCOLOR
- 8980 '
- 8990 ' DISPLAY THE MESSAGE
- 9000 LOCATE 23,11
- 9010 PRINT "PRESS "CHR$(17);" TO CONTINUE";
- 9020 DRAW "C=MCOLOR;BM135,179R7U3"
- 9030 '
- 9040 ' GO BACK AND CHECK KEY BUFFER AGAIN
- 9050 GOTO 8790
- 9060 '
- 9070 ' RESTORE MESSAGE AREA TO SCREEN
- 9080 PUT (75,173),MESSAGE,PSET
- 9090 '
- 9100 ' SET TEXT COLOR TO ORIGINAL VALUE
- 9110 POKE &H4E, 3
- 9120 '
- 9130 ' END OF WAIT-FOR-USER SUBROUTINE
- 9140 RETURN
-